package net.realsee.service.wcs.device;

import com.baomidou.mybatisplus.extension.service.IService;
import net.realsee.domain.wcs.device.WcsPlcTag;
import net.realsee.domain.wcs.device.bo.PlcReadWriteBo;
import net.realsee.domain.wcs.device.bo.PlcTagTreeNode;
import net.realsee.domain.wcs.device.bo.WcsPlcTagBo;
import net.realsee.domain.wcs.device.vo.WcsPlcTagVo;
import net.realsee.framework.core.domain.PageQuery;
import net.realsee.framework.core.page.TableDataInfo;
import net.realsee.framework.plc.PlcOperateResult;

import java.util.Collection;
import java.util.List;

/**
 * IOT TAGService接口
 *
 * @author realsee
 * @date 2023-08-11
 */
public interface IWcsPlcTagService extends IService<WcsPlcTag> {

    /**
     * 查询IOT TAG
     */
    WcsPlcTagVo selectVoById(Long id);

    /**
     * 查询IOT TAG列表
     */
    TableDataInfo<WcsPlcTagVo> selectVoPage(WcsPlcTagBo bo, PageQuery pageQuery);

    /**
     * 查询IOT TAG列表
     */
    List<WcsPlcTagVo> selectVoList(WcsPlcTagBo bo);

    /**
     * 新增IOT TAG
     */
    Boolean insertByBo(WcsPlcTagBo bo);

    /**
     * 修改IOT TAG
     */
    Boolean updateByBo(WcsPlcTagBo bo);

    /**
     * 校验并批量删除IOT TAG信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids);

    /**
     * 通过点位Code获取点位信息（会缓存）
     */
    PlcReadWriteBo getByTagCode(String tagCode);

    /**
     * 查询TAG树
     */
    PlcTagTreeNode tree();

    /**
     * 获取点位当前值
     */
    PlcOperateResult currentContent(String tagCode);

    /**
     * 清除Tag缓存（任何修改和删除操作，都要调用该方法）
     */
    void cleanTagCache();

    /**
     * 写值
     */
    PlcOperateResult write(String tagCode, String value);
}
